package com.lyp.jackson.server.service;

import com.lyp.jackson.model.entity.Seckill;
import com.lyp.jackson.server.response.Result;

public interface SeckillService {

    Seckill selectBySeckillId(long seckillId);

    /**
     * 普通秒杀，最low实现
     * @param seckillId
     * @param userId
     * @return
     */
    Result startSeckil(long seckillId, long userId);

    /**
     * 普通秒杀(限流处理)
     * @param seckillId
     * @param userId
     * @return
     */
    Result startSeckilLimit(long seckillId, long userId);

    /**
     * 秒杀程序锁Lok
     * @param seckillId
     * @param userId
     * @return
     */
    Result startSeckilLock(long seckillId, long userId);

    /**
     * 秒杀程序锁AOP实现Lock
     * @param seckillId
     * @param userId
     * @return
     */
    Result startSeckilAopLock(long seckillId, long userId);

    /**
     * 秒杀数据库悲观锁一
     * @param seckillId
     * @param userId
     * @return
     */
    Result startSeckilDBPCC_ONE(long seckillId,long userId);
    /**
     * 秒杀数据库悲观锁二
     * @param seckillId
     * @param userId
     * @return
     */
    Result startSeckilDBPCC_TWO(long seckillId,long userId);

    /**
     * 秒杀数据库乐观锁
     * @param seckillId
     * @param userId
     * @param number
     * @return
     */
    Result startSeckilDBOCC(long seckillId,long userId,long number);

    void deleteSeckill(long seckillId);


}
